#!/usr/bin/python
#coding:utf-8
'''
logistic 二分类回归模型
'''
import numpy as np 
import matplotlib.pyplot as plt 
from sklearn import linear_model,datasets 

#sklearn 逻辑回归二分类模型
def dataSet():
    iris=datasets.load_iris()
    # print iris.data #得到二维数组
    x=iris.data[:,:2] #截取前两列
    y=iris.target

    print 'x:',x.dtype
    print 'y:',y.dtype

    #步长
    h=0.2 

    #设置参数
    logreg=linear_model.LogisticRegression(C=1e5)
    #拟合数据
    logreg.fit(x,y)

    #分别取第一列和第二列最大最小值，步长h生成数组
    x_min,x_max=x[:,0].min() - .5,x[:,0].max() + .5 #特征长度
    y_min,y_max=x[:,1].min() - .5,x[:,1].max() + .5 #特征宽度
    xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))

    Z=logreg.predict(np.c_[xx.ravel(),yy.ravel()]) #将两个两个矩阵合并一维数组
    #预测结果
    Z=Z.reshape(xx.shape)

    #绘制图形
    plt.figure(1,figsize=(8,6))
    plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Paired)

    #将训练点打印在图片上
    plt.scatter(x[:,0],x[:,1],c=y,edgecolors='K',cmap=plt.cm.Paired)
    plt.xlabel('Sepal length')
    plt.ylabel('Sepal width')

    plt.xlim(xx.min(),xx.max())
    plt.ylim(yy.min(),yy.max())
    plt.xticks(())
    plt.yticks(())
    
    plt.show()

def main():
    dataSet()

if __name__ == '__main__':
    main()